﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using ControlStock.Dominio;

namespace ControlStock.Repositorio
{
    public class UsuarioRepositorio
    {
        Conexion Conn;
        public UsuarioRepositorio()
        {
            Conn = new Conexion();
        }

        public int Agregar(Usuario Usuario)
        {
            String Consulta = " Insert into USUARIO (Usu_Password, Usu_Nombre, Usu_Telefono, ";
            Consulta += " Usu_Celular, Usu_Mail, Usu_Direccion, Usu_Estado, Usu_Tipo) ";
            Consulta += " VALUES ('" + Usuario.Pass_Usu + "','" + Usuario.Nombre_Usu + "'," + Usuario.Telefono_Usu;
            Consulta += "," + Usuario.Celular_Usu + ",'" + Usuario.Mail_Usu + "','" + Usuario.Direccion_Usu;
            Consulta += "'," + (Usuario.Estado_Usu ? 1 : 0) + "," + Usuario.Tipo_Usu + ") Select @@Identity ";
            return Conn.Insertar(Consulta);
        }

        public void Modificar(Usuario Usuario)
        {
            String Consulta = " Update USUARIO Set Usu_Password = '" + Usuario.Pass_Usu + "', Usu_Nombre = '" + Usuario.Nombre_Usu + "', Usu_Telefono = " + Usuario.Telefono_Usu + ", ";
            Consulta += " Usu_Celular = " + Usuario.Celular_Usu + ", Usu_Mail = '" + Usuario.Mail_Usu + "', Usu_Direccion = '" + Usuario.Direccion_Usu + "', ";
            Consulta += " Usu_Estado = " + (Usuario.Estado_Usu ? 1 : 0) + ", Usu_Tipo = " + Usuario.Tipo_Usu + " Where Usu_Id = " + Usuario.Id_Usu;
            Conn.ModificarEliminar(Consulta);
        }

        public Usuario Buscar(int Idusuario)
        {
            String Consulta = " Select * From USUARIO Where Usu_ID = " + Idusuario;
            DataTable Tabla = Conn.Buscar(Consulta);
            if (Tabla.Rows.Count == 1)
            {
                return this.Mapear(Tabla.Rows[0]);
            }
            else
                return null;
        }

        public List<Usuario> Listar()
        {
            String Consulta = " Select * From USUARIO ";
            DataTable TablaUsuarios = Conn.Buscar(Consulta);
            List<Usuario> ListaUsuarios = new List<Usuario>();
            foreach (DataRow Fila in TablaUsuarios.Rows)
            {
                ListaUsuarios.Add(this.Mapear(Fila));
            }
            return ListaUsuarios;
        }

        private Usuario Mapear(DataRow Fila)
        {
            Usuario usuario_Mapeado = null;
            if (Fila != null)
            {
                usuario_Mapeado = new Usuario();
                usuario_Mapeado.Celular_Usu = Fila.IsNull("Usu_Celular") ? 0 : Convert.ToInt64(Fila["Usu_Celular"]);
                usuario_Mapeado.Direccion_Usu = Fila.IsNull("Usu_Direccion") ? "" : Fila["Usu_Direccion"].ToString();
                usuario_Mapeado.Estado_Usu = Fila.IsNull("Usu_Estado") ? false : Convert.ToBoolean(Fila["Usu_Estado"]);
                usuario_Mapeado.Id_Usu = Fila.IsNull("Usu_Id") ? 0 : Convert.ToInt32(Fila["Usu_Id"]);
                usuario_Mapeado.Mail_Usu = Fila.IsNull("Usu_Mail") ? "" : Fila["Usu_Mail"].ToString();
                usuario_Mapeado.Nombre_Usu = Fila.IsNull("Usu_Nombre") ? "" : Fila["Usu_Nombre"].ToString();
                usuario_Mapeado.Pass_Usu = Fila.IsNull("Usu_Password") ? "" : Fila["Usu_Password"].ToString();
                usuario_Mapeado.Telefono_Usu = Fila.IsNull("Usu_Telefono") ? 0 : Convert.ToInt64(Fila["Usu_Telefono"]);
                usuario_Mapeado.Tipo_Usu = Fila.IsNull("Usu_Tipo") ? 0 : Convert.ToInt32(Fila["Usu_Tipo"]);
            }
            return usuario_Mapeado;
        }


        //Ver si esta bien
        public Usuario Validar(string Nombre, string Password)
        {
            String Consulta = " Select * From USUARIO  Where Usu_Nombre ='" +Nombre+ "' and Usu_Password='"+Password+"'";
            DataTable Tabla = Conn.Buscar(Consulta);
            if (Tabla.Rows.Count == 1)
            {
                return this.Mapear(Tabla.Rows[0]);
            }
            else
                return null;
        }
    }
}
